--[[
3.require——我只执行一次
require和dofile有点像，不过又很不一样，require在第一次加载文件的时候，会执行里面的代码。
但是，第二次之后，再次加载文件，则不会重复执行了。换句话说，它会保存已经加载过的文件，不会重复加载。
]]
local p1 = require "Person"

local p2 = require "Person"
-- 同一个对象,使用require多次，只会执行一次。更改一处影响全局。
p2.name = 'haha'
p1.age = 3

p1:say()
p2:say()

-- 然而 dofile 会立即执行
p3 = dofile('Person.lua')
p4 = dofile('Person.lua')
p3:say()

--[[
1.loadfile——只编译，不运行
loadfile故名思议，它只会加载文件，编译代码，不会运行文件里的代码。
即，print 语句也不会输出。
]]
p5 = loadfile('Person.lua')
--此时这个文件并没有运行
print('--before p5 .....')
p6 = p5()
p6:say()
print('--after p5 .....')

local sp = [[
	print "haha,i'm a script."
	print "haha,i'm a script."
]]

local spfun = load(sp)
spfun()


-- print(ha)
-- Haha.Vprint()
-- complex.Vprint()
-- Vprint()
-- print(name)
-- print(age)
-- print(package.path)
-- print(package.loaded)
-- print(package.searchers)
-- print(package.preload)

function  visiT( tab )
	for k,v in pairs(tab) do
		print(k,"-->",v)
	end
end

------  加载 util 目中的文件
print(package.path)
package.path = package.path .. ';./?/init.lua;'
-- 引用目录直接加载里面的init.lua文件
local util = require('util')
print(util.name)
util.say()

util.name = "woqu"

assert("woqu" == require('util').name)





